﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PlusArquivosDigitais
{
    public partial class FrmConexao : Form
    {
        public FrmConexao()
        {
            InitializeComponent();
        }

        private void mnFechar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void FrmConexao_Load(object sender, EventArgs e)
        {
            CarregarConfiguracoes();
        }

        private void CarregarConfiguracoes()
        {
            Entidades.ConfigConexao obj = new PlusArquivosDigitais.Entidades.ConfigConexao();
            obj = Controle.CTLDBSystem.ObterDadosDeConexao();
            if (obj.StrConn != null)
            {
                //Obtém a Lista de SGBD's.
                cbBanco.Items.Clear();
                cbBanco.Items.Add(string.Empty);
                foreach (string item in Controle.CTLDBSystem.ObterListaSGBD())
                {
                    cbBanco.Items.Add(item.ToString());
                }

                cbBanco.Text = Controle.CTLDBSystem.ObterNomeDoSGBD(obj.IdBanco);
                txtServerName.Text = obj.ServerName;
                txtDataBase.Text = obj.DataBase.ToUpper();
                txtUsuario.Text = obj.User;
                txtSenha.Text = obj.Senha;
                txtStringConexao.Text = obj.StrConn;
            }
            else
            {
                //Obtém a Lista de SGBD's...
                cbBanco.Items.Clear();
                cbBanco.Items.Add(string.Empty);
                foreach (string item in Controle.CTLDBSystem.ObterListaSGBD())
                {
                    cbBanco.Items.Add(item.ToString());
                }

                if (txtStringConexao.Text == string.Empty)
                {
                    switch (cbBanco.Text)
                    {
                        case "PostGres":
                            txtStringConexao.Text = "Server= [SERVER NAME];port=5432;User id= [USUARIO]; password= [SENHA] ;Database= [BANCO];";
                            break;
                        case "SQL Server":
                            txtStringConexao.Text = "Data Source= [SERVER NAME];Initial Catalog= [BANCO];Persist Security Info=True;User ID= [USUARIO];Password= [SENHA]";
                            break;
                        default:
                            break;
                    }
                }
            }
        }

        private void btConfirmar_Click(object sender, EventArgs e)
        {
            if (Validacao() == false)
            {
                btTesteConexao.Enabled = false;
                MessageBox.Show("Preenchimento obrigatório dos parâmetros!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
            else
            {
                if (txtServerName.Text != string.Empty)
                btTesteConexao.Enabled = true;

                switch (cbBanco.Text)
                {
                    case "PostGres":
                        txtStringConexao.Text = "Server=" + txtServerName.Text + ";port=5432;User id=" + txtUsuario.Text + ";password= " + txtSenha.Text + ";Database= " + txtDataBase.Text.ToUpper() + ";";
                        break;
                    case "SQL Server":                        
                        txtStringConexao.Text = "Data Source= " + txtServerName.Text + ";Initial Catalog= " + txtDataBase.Text.ToUpper() + ";Persist Security Info=True;User ID= " + txtUsuario.Text + ";Password= " + txtSenha.Text;
                        break;
                    default:
                        break;
                }
            }
        }

        private bool Validacao()
        {
            bool retorno = true;
            
            switch (cbBanco.Text)
            {
                case "PostGres":
                    if (cbBanco.Text == string.Empty || txtDataBase.Text == string.Empty || txtUsuario.Text == string.Empty || txtSenha.Text == string.Empty)
                    {                        
                        retorno = false;
                    }
                    txtStringConexao.Text = "Server=" + txtServerName.Text + ";port=5432;User id=" + txtUsuario.Text + ";password= " + txtSenha.Text + ";Database= " + txtDataBase.Text + ";";
                    break;
                case "SQL Server":
                    if (cbBanco.Text == string.Empty || txtServerName.Text == string.Empty || txtDataBase.Text == string.Empty || txtUsuario.Text == string.Empty || txtSenha.Text == string.Empty)
                    {                        
                        retorno = false;
                    }

                    txtStringConexao.Text = "Data Source= " + txtServerName.Text + ";Initial Catalog= " + txtDataBase.Text + ";Persist Security Info=True;User ID= " + txtUsuario.Text + ";Password= " + txtSenha.Text;
                    break;
                default:
                    break;
            }

            return retorno;
        }

        private void cbBanco_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtServerName.Text = "Localhost";
            mnDesfazer.Enabled = false;
            switch (cbBanco.Text)
            {
                case "PostGres":
                    txtStringConexao.Text = "Server= [SERVER NAME];port=5432;User id= [USUARIO]; password= [SENHA] ;Database= [BANCO];";
                    break;
                case "SQL Server":                    
                    txtStringConexao.Text = "Data Source= [SERVER NAME];Initial Catalog= [BANCO];Persist Security Info=True;User ID= [USUARIO];Password= [SENHA]";
                    mnDesfazer.Enabled = true;
                    break;                
                default:
                    txtServerName.Text = string.Empty;
                    txtStringConexao.Text = string.Empty;
                    txtDataBase.Text = string.Empty;
                    txtUsuario.Text = string.Empty;
                    txtSenha.Text = string.Empty;
                    btTesteConexao.Enabled = false;
                    mnDesfazer.Enabled = true;
                    break;
            }
        }

        private void mnSalvar_Click(object sender, EventArgs e)
        {
            if (Validacao() == false)
            {
                MessageBox.Show("Preenchimento obrigatório dos parâmetros!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }

            Entidades.ConfigConexao ccnx = new PlusArquivosDigitais.Entidades.ConfigConexao();
            ccnx.IdBanco = Controle.CTLDBSystem.ObterIdBanco(cbBanco.Text);
            ccnx.StrConn = txtStringConexao.Text;
            ccnx.User = txtUsuario.Text;
            ccnx.Senha = txtSenha.Text;
            ccnx.ServerName = txtServerName.Text;
            ccnx.DataBase = txtDataBase.Text.ToUpper();

            if (Controle.CTLDBSystem.InserirConexao(ccnx) == false)
            {
                MessageBox.Show("Não foi possível salvar as configurações!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
            else
            {
                MessageBox.Show("Configuração aplicada com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
        }

        private void btTesteConexao_Click(object sender, EventArgs e)
        {
            switch (cbBanco.Text)
            {
                case "PostGres":
                    if (Controle.CTLPG.ObterRespostaConexaoPG(txtStringConexao.Text) == true)
                    {
                        MessageBox.Show("Conexão executando com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                    else
                    {
                        MessageBox.Show("Conexão não pode ser aberta!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                    break;
                case "SQL Server":
                    if (Controle.CTLSQLDB.ObterRespostaConexaoSQLServer(txtStringConexao.Text) == true)
                    {
                        MessageBox.Show("Conexão executando com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                    else
                    {
                        MessageBox.Show("Conexão não pode ser aberta!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                    break;
                default:
                    break;
            }

            
        }

        private void mnDesfazer_Click(object sender, EventArgs e)
        {
            CarregarConfiguracoes();
        }
                
    }
}
